package util;

import java.io.File;
import java.util.HashMap;
import java.util.Map;

import org.jdom.Document;
import org.jdom.Element;
import org.jdom.input.SAXBuilder;

import custos.CalculadorDeCorretagem;

public interface Corretora {
	public static final class Factory {
		private static Map corretoras = new HashMap(2);
		static {
			corretoras.put("FATOR", Fator.class);
			corretoras.put("AGORA", Agora.class);
		}

		public static final Corretora getCorretora(String configFileName) {
			try {
				Document d = new SAXBuilder().build(new File(configFileName));
				String nome = d.getRootElement().getChildText("nome");
				if (corretoras.containsKey(nome.toUpperCase())) {
					Class corretoraClass = (Class) corretoras.get(nome
							.toUpperCase());
					Corretora corretora = (Corretora) corretoraClass
							.getConstructor(new Class[] { Element.class })
							.newInstance(new Object[] { d.getRootElement() });
					return corretora;
				} else
					throw new IllegalArgumentException("Corretora " + nome
							+ " inválida.");
			} catch (Exception e1) {
				throw new RuntimeException();
			}
		}
	}

	public abstract CalculadorDeCorretagem getCalculadorDeCorretagem();

	public abstract String getNome();

}
